const {app, BrowserWindow, Menu, ipcMain, dialog, globalShortcut} = require('electron')
const path = require('path')
const WinState = require("electron-win-state").default;

/*
    下载 electtron 出现请求超时等问题需要配置 .npmrc 镜像:
        registry=https://registry.npm.taobao.org/
        sass_binary_site=https://npm.taobao.org/mirrors/node-sass/
        phantomjs_cdnurl=http://npm.taobao.org/mirrors/phantomjs
        electron_mirror=https://npm.taobao.org/mirrors/electron/

 */

// 关闭顶部的菜单
Menu.setApplicationMenu(null)

const winState = new WinState({
    defaultWidth: 800,
    defaultHeight: 600,
})

const createWindow = () => {
    const win = new BrowserWindow({
        ...winState.winOptions,
        // width: 800, // 如果使用了 winState 则不要在使用这个, 会覆盖原有的
        // height: 600,
        // frame: false, // 是否显示顶层栏条, 这样就不可以拖动了, 但是可以通过 css 来实现拖动(在app.css中查看)
        webPreferences: {
            preload: path.join(__dirname, 'preload.js')
        }
    })
    winState.manage(win)

    // win.loadURL('http://jx.1000phone.net')
    win.loadFile('index.html')

    const wc = win.webContents;
    wc.openDevTools() // 打开开发者工具

    wc.on('dom-ready', () => {
        console.log('dom-ready')
    })
    // 点击右键
    wc.on('context-menu', (e, params) => {
        // wc.executeJavaScript(`alert('test')`)

        /*dialog.showOpenDialog({
            buttonLabel: '选择',
            defaultPath: app.getPath('desktop'),
            properties: ['multiSelections', 'createDirectory', 'openFile', 'openDirectory']
        }).then(res => {
            console.log('dialog.showOpenDialog', res)
        })*/

        const answer = ['Yes', 'No', 'Maybe', '你猜']
        dialog.showMessageBox({
            title: 'Message box',
            message: 'Please select on option',
            detail: 'Message Detail',
            buttons: answer
        }).then(res => {
            console.log(`dialog.showMessageBox, user selected: ${answer[res]}`)
        })
    })

    // 在页面加载好了之后才会显示程序
    win.on('ready-to-show', () => {
        win.show()
    })
}


// 这段程序将会在 Electron 结束初始化
// 和创建浏览器窗口的时候调用
// 部分 API 在 ready 事件触发后才能使用。
app.whenReady().then(() => {
    createWindow()

    app.on('activate', () => {
        // 在 macOS 系统内, 如果没有已开启的应用窗口
        // 点击托盘图标时通常会重新创建一个新窗口
        if (BrowserWindow.getAllWindows().length === 0) createWindow()
    })
})

// 除了 macOS 外，当所有窗口都被关闭的时候退出程序。 因此, 通常
// 对应用程序和它们的菜单栏来说应该时刻保持激活状态,
// 直到用户使用 Cmd + Q 明确退出
app.on('window-all-closed', () => {
    if (process.platform !== 'darwin') app.quit()
})

// 窗口关闭之前
app.on('before-quit', () => {
    console.log('App is quiting')
    // e.preventDefault()
})
// 在窗口失去焦点时
app.on('browser-window-blur', (e) => {
    console.log('App unfocused')
})
// 在窗口获得焦点时
app.on('browser-window-focus', (e) => {
    console.log('App focused')
})

// 在当前文件中你可以引入所有的主进程代码
// 也可以拆分成几个文件，然后用 require 导入。

ipcMain.handle('send-event', (event, args) => {
    console.log('main.js: ' + args)
    // 返回给渲染进程
    return args
})

globalShortcut.register('G + Y', () => {
    console.log('User pressed G + Y')
    globalShortcut.unregister('G + Y')
})

/*
    方法:
        app.quit() 退出,关闭程序
 */

















